(function($) {
$.extend({
placeholder : {
settings : {
focusClass: 'placeholderFocus',
activeClass: 'placeholder',
overrideSupport: false,
preventRefreshIssues: true
},
debug : false,
log : function(msg){
if(!$.placeholder.debug) return;
msg = "[Placeholder] " + msg;
$.placeholder.hasFirebug ?
console.log(msg) :
$.placeholder.hasConsoleLog ?
window.console.log(msg) :
alert(msg);
},
hasFirebug : "console" in window && "firebug" in window.console,
hasConsoleLog: "console" in window && "log" in window.console
}

});

    // check browser support for placeholder
    $.support.placeholder = 'placeholder' in document.createElement('input');

// Replace the val function to never return placeholders
$.fn.plVal = $.fn.val;
$.fn.val = function(value) {
$.placeholder.log('in val');
if(this[0]) {
$.placeholder.log('have found an element');
var el = $(this[0]);
if(value != undefined)
{
$.placeholder.log('in setter');
var currentValue = el.plVal();
var returnValue = $(this).plVal(value);
if(el.hasClass($.placeholder.settings.activeClass) && currentValue == el.attr('placeholder')){
el.removeClass($.placeholder.settings.activeClass);
}
return returnValue;
}

if(el.hasClass($.placeholder.settings.activeClass) && el.plVal() == el.attr('placeholder')) {
$.placeholder.log('returning empty because its a placeholder');
return '';
} else {
$.placeholder.log('returning original val');
return el.plVal();
}
}
$.placeholder.log('returning undefined');
return undefined;
};

// Clear placeholder values upon page reload
$(window).bind('beforeunload.placeholder', function() {
var els = $('input.placeholderActive' );
if(els.length > 0)
els.val('').attr('autocomplete','off');
});


    // plugin code
$.fn.placeholder = function(opts) {
opts = $.extend({},$.placeholder.settings, opts);

// we don't have to do anything if the browser supports placeholder
if(!opts.overrideSupport && $.support.placeholder)
return this;

        return this.each(function() {
            var $el = $(this);

            // skip if we do not have the placeholder attribute
            if(!$el.is('[placeholder]'))
                return;

            // we cannot do password fields, but supported browsers can
            if($el.is(':password'))
                return;

// Prevent values from being reapplied on refresh
if(opts.preventRefreshIssues)
$el.attr('autocomplete','off');

            $el.bind('focus.placeholder', function(){
                var $el = $(this);
                if(this.value == $el.attr('placeholder') && $el.hasClass(opts.activeClass))
                    $el.val('')
                       .removeClass(opts.activeClass)
                       .addClass(opts.focusClass);
            });
            $el.bind('blur.placeholder', function(){
                var $el = $(this);

$el.removeClass(opts.focusClass);

                if(this.value == '')
                  $el.val($el.attr('placeholder'))
                     .addClass(opts.activeClass);
            });

            $el.triggerHandler('blur');

// Prevent incorrect form values being posted
$el.parents('form').submit(function(){
$el.triggerHandler('focus.placeholder');
});

        });
    };
})(jQuery);